<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<meta http-equiv="X-UA-Compatible" content="IE=edge" >
	<title>moonlight平台开发样例</title>
	<link rel="icon"  type="image/x-icon" href="img/mlogo.png" />  
	<link rel="shortcut icon"  type="image/x-icon" href="img/mlogo.png" /> 	
	<!-- 包含有bootstrap样式 -->
	<link rel="stylesheet" href="themes/default/style.css">
	<!-- 包含有loading图像 -->
	<link rel="stylesheet" href="themes/default/style-ecp-plugins.css"> 
	<link rel="stylesheet" href="airlineView.css">
</head>
<body> 
	<div class="top-title">
		moonlight平台开发样例
	</div> 
	
	<div class="bar">
		<a href="#intro1" class="nav">简介</a> 
		<a href="#intro1" class="nav left-space">业务背景</a>
		<a href="#intro2" class="nav left-space">物理模型</a>
		<a href="#intro3" class="nav left-space">代码结构说明</a>
		<a href="#table1" class="nav">样例</a>
		<a href="#table1" class="nav left-space">单表无条件查询</a> 
		<a href="#table2" class="nav left-space">单表少条件查询</a> 
		<a href="#table3" class="nav left-space">单表多条件查询</a> 
		<a href="#table4" class="nav left-space">多表多条件查询</a> 
		<a href="#table5" class="nav left-space">返回动态结果集</a> 
		<a href="#table6" class="nav left-space">新增单条记录</a> 
		<a href="#table7" class="nav left-space">批量修改/删除单表记录</a>
		<a href="#intro1" class="nav">返回顶部</a> 
	</div>
	
	<div class="content">
		<div class="word-intro" id="intro1">
			<div class="title">业务背景</div>
			<div>
			简介：本开发样例以航线、航班、乘客、航线乘客关系为物理模型来开发CRUD样例，
			用以展示基于moonlight平台开发的代码风格。
			<br>
			</div>
		</div>	
		
		<div class="word-intro" id="intro2">
			<div class="title">物理模型</div>  
			<div>
				<img alt="airline-er-image" src="img/airline-ER.png">
			</div>
		</div>		
		
		<div class="word-intro" id="intro3">
			<div class="title">代码结构说明</div>  
			<div>
			模块中Airline、AirlineFlight两个实体的po、vo、transfer和dao、role、context层代码的CRUD接口及其空的实现都是由平台生成，
			乘客及乘客航线关系不需创建实体及接口、实现。前端通过require来引用组件，以页面控制器形式编写实现，
			服务端根据业务需求拓展需要的接口并实现，role层完成主要的核心逻辑处理。<br>
			各层代码说明如下：<br>
			<div class="subtitle">dao层</div>
				<img alt="daointro" src="img/daointro.png">
			<div class="subtitle">service层</div>
				<img alt="serviceintro" src="img/serviceintro.png">
			<div class="subtitle">impl层</div>
				<img alt="implintro" src="img/implintro.png">
			<div class="subtitle">前端</div> 
				<img alt="viewintro" src="img/viewintro.png"><br>
			该模块的源码放在码云，地址如下：<br>
			平台代码
			<a href="https://gitee.com/allenwe23/moonlight/tree/master/moonlight" target="_blank">
			https://gitee.com/allenwe23/moonlight/tree/master/moonlight</a><br>			
			前端代码
			<a href="https://gitee.com/allenwe23/moonlight.demo/tree/master/moonlight.demo/src/main/webapp" target="_blank">
			https://gitee.com/allenwe23/moonlight.demo/tree/master/moonlight.demo/src/main/webapp</a><br>
			服务端代码
			<a href="https://gitee.com/allenwe23/moonlight.demo/tree/master/moonlight.demo/src/main/java/com/alphalab/moonlight/demo"
			target="_blank">
			https://gitee.com/allenwe23/moonlight.demo/tree/master/moonlight.demo/src/main/java/com/alphalab/moonlight/demo</a>					
			</div>
		</div>					
	
		<div class="grid-table" id="table1">
			<div class="title">单表无条件查询</div>
			需求：查询全部航线记录。<br>
			实现方法：<br>
			1.前端：调用查询服务airlineQueryContext的findListWithCondition方法获取结果集，对表格的航班编号进行ID名称转换为航空公司+航班编号。<br>
			2.服务端：无需编码。<br>
			<button class="btn btn-primary" id="queryBtn">查询</button>
			<table id="simpleGrid"></table>
		</div>
		
		<div class="grid-table" id="table2">
			<div class="title">单表少条件查询</div> 
			需求：按出发点为深圳、终点为台北为条件查询航班信息，按出发日期排序分页展示结果。<br>
			实现方法：<br>
			1.前端：新建itemConditions条件对象集合，调用查询服务airlineQueryContext的findListWithCondition、findListByPageWithCondition方法。<br>
			2.服务端：无需编码。<br>
			<div class="page-query">
				出发点：深圳&nbsp;&nbsp;&nbsp;终点：台北 &nbsp;&nbsp;&nbsp;
				<button class="btn btn-primary" id="queryBtn2">查询</button>
			</div>
			<table id="simpleGrid2"></table>
		</div>
		
		<div class="grid-table" id="table3">
			<div class="title">单表多条件查询</div>
			需求：按出发点为深圳、出发日期在2018-03-01~2018-03-10之间、航班为南方航空CZ3087、东方航空MU2519为条件查询航班信息，按票价排序分页展示结果。<br>
			实现方法：<br>
			1.前端：新建查询对象queryParamVO，调用查询服务airlineQueryContext的getAirlineList方法。<br>
			2.服务端：对应前端新建查询条件对象FlightQueryParamVO，context、role、dao层分别新建getAirlineList、getAirlineListByPage查询方法，
			dao层将flightQueryParamVO里的条件注入map进行sql查询，然后将结果集映射到Airline对象，最后返回结果到context层。<br>
			<div class="page-query">
				出发点：深圳&nbsp;&nbsp;&nbsp;开始日期：2018-03-01 &nbsp;&nbsp;&nbsp;结束日期：2018-03-10
				&nbsp;&nbsp;&nbsp;航班：CZ3087、MU2519&nbsp;&nbsp;&nbsp;
				<button class="btn btn-primary" id="queryBtn3">查询</button>
			</div> 
			<table id="simpleGrid3"></table>
		</div>	
		
		<div class="grid-table" id="table4">
			<div class="title">多表多条件查询</div>
			需求：按出发点、出发日期在2018-03-01~2018-03-02之间为条件查询所有旅客行程信息，按出发日期排序展示全部结果。<br>
			实现方法：<br>
			1.前端：新建查询对象queryParamVO，调用查询服务airlineQueryContext的getPassengerTravelList方法。<br>
			2.服务端：新建查询条件对象FlightQueryParamVO、查询结果VO对象PassengerTravelVO和PO对象PassengerTravel，
			context、role、dao层分别新建getPassengerTravelList查询方法，dao层将flightQueryParamVO里的条件注入map进行sql查询，
			然后将结果集映射到PassengerTravel对象，最后返回结果到context层。
			<div class="page-query">
				出发点：深圳&nbsp;&nbsp;&nbsp;开始日期：2018-03-01 &nbsp;&nbsp;&nbsp;结束日期：2018-03-02&nbsp;&nbsp;&nbsp;
				<button class="btn btn-primary" id="queryBtn4">查询</button>
			</div>			
			<table id="complexGrid"></table>
		</div>
		
		<div class="grid-table" id="table5">
			<div class="title">返回动态结果集</div>
			需求：即热门旅游地趋势对比分析，按选择的分析周期、分析城市、标杆城市统计分析国内航班在分析周期中各个月份的以对比的两个城市为目的地的航班数趋势对比。
			列表展示为树表，有合并表头，并有统计行，各行列数值可穿透查看航班明细。<br>
			实现方法：<br>
			1.前端：新建查询条件对象queryParamVO，调用查询服务airlineQueryContext的getFlightTrendAnalyseResult方法，列表的动态列名值需与服务端动态属性相对应。<br>
			2.服务端：新建查询条件对象FlightTrendQueryParamVO、动态查询结果VO对象FlightTrendAnalyseVO，context、role层分别新建getFlightTrendAnalyseResult查询方法，
			dao层新建对应的查询方法，在role层完成核心的统计分析、组装结果集返回结果到context层。
			<div class="page-query">
				分析周期：3月&nbsp;&nbsp;&nbsp;至&nbsp;&nbsp;&nbsp;5月&nbsp;&nbsp;&nbsp;分析城市：台北&nbsp;&nbsp;&nbsp;标杆城市：上海&nbsp;&nbsp;&nbsp;
				<button class="btn btn-primary" id="queryBtn5">查询</button>
			</div>						
			<table id="complexGrid2"></table>
		</div>
		
		<div class="grid-table" id="table6">
			<div class="title">新增单条记录</div>
			需求：新增单条航线信息。<br>
			实现方法：<br>
			1.前端：封装行记录对象，调用增删改服务airlineContext的save方法进行保存。<br>
			2.服务端：无需编码。
			<div class="page-query">
				<button class="btn btn-primary" id="addBtn">新增</button>
			</div>	
		</div>		
		
		<div class="grid-table bottom-space" id="table7">
			<div class="title">批量修改/删除单表记录</div>
			需求：在表格中可编辑修改航线的票价并能批量保存，对勾选的航线信息可删除。<br>
			实现方法：<br>
			1.前端：调用增删改服务airlineContext的updateList、deleteList方法进行修改、删除。<br>
			2.服务端：无需编码。
			<div class="page-query">
				<button class="btn btn-primary" id="queryBtn6">查询</button>
				<button class="btn btn-primary" id="updateBtn">更新</button>
				<button class="btn btn-primary" id="deleteBtn">删除</button>
			</div>	
			<table id="editGrid"></table>
		</div>
		
	</div>
	 
	<script data-main="airlineController.js" src="webcore/scripts/moonlight.starter.js"></script>  
</body>
</html>